﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Sinacor.Infra.UI.Controls.SmartClient;
using Sinacor.UI.Bovespa.Clientes.Presenter;
using Sinacor.Infra.UI.Common;
using Sinacor.UI.Bovespa.Clientes.Model;

namespace Sinacor.UI.Bovespa.Clientes.View.SmartClient
{
    /// <summary>
    /// Interaction logic for CadastroErrosExportacaoEspecificacaoComitentes.xaml
    /// </summary>
    public partial class CadastroErrosExportacaoEspecificacaoComitentes : SinacorWindow, ICadastroErroExportacaoComitente
    {
        #region Variáveis Públicas

        public Presenter.CadastroErroExportacaoComitente _presenter { get; set; }

        #endregion

        #region Construtor

        /// <summary>
        /// Construtor da classe CadastroErrosExportacaoEspecificacaoComitentes
        /// </summary>
        public CadastroErrosExportacaoEspecificacaoComitentes()
        {
            InitializeComponent();

            // Inicialize a presenter no construtor
            this._presenter = new Presenter.CadastroErroExportacaoComitente(this);
            
            // Configure a presenter no DataContext da janela (para facilitar os bindings)
            this.DataContext = this._presenter;

            // Configurando o Type de novos itens da grid, só necessário quando a grid permitir inclusão
            // Obs: Esta property foi configurada no Code-Behind porque quando configurada no XAML o type
            // não é encontrado.
            this.dtgErrosExportacaoEspecificacaoComitentes.NewItemType = typeof(Model.ErroExportacaoComitente);

            this.AfterInitialize += new RoutedEventHandler(CadastroErrosExportacaoEspecificacaoComitentes_AfterInitialize);
        }

        void CadastroErrosExportacaoEspecificacaoComitentes_AfterInitialize(object sender, RoutedEventArgs e)
        {
            this._presenter.Inicializar();
        }

        #endregion

        #region Eventos da Sinacor DataGrid

        private void dtgErrosExportacaoEspecificacaoComitentes_SavingAll(object sender, CancelItemsEventArgs e)
        {
            if (e.OriginalSource is SinacorDataGrid)
            {
                this.ClearServiceErrors();

                if (!this._presenter.Salvar())
                    e.Cancel = true;
                return;
            }
        }

        #endregion

        #region ICadastroErroExportacaoComitente Members

        /// <summary>
        /// Atualiza dados da Grid
        /// </summary>
        public void AtualizarErrosExportacaoComitente()
        {
            this.dtgErrosExportacaoEspecificacaoComitentes.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        /// <summary>
        /// Envia mensagem de registro não encontrado
        /// </summary>
        public void InformarNenhumRegistroEncontrado()
        {
            SinacorMessageBox.Show(FindResource("Bovespa.Cliente.Message.NaoExistemDadosCadastrados").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Exclamation);
        }

        /// <summary>
        /// Envia mensagem de sucesso
        /// </summary>
        public void InformarOperacaoSucesso()
        {
            SinacorMessageBox.Show(FindResource("Bovespa.Cliente.Message.OperacoesRealizadaSucesso").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
        }

        /// <summary>
        /// Informação que uma linha de inserção ou atualização está com o mesmo codigo
        /// </summary>
        public void InformarLinhaMesmoCodigo()
        {
            //linhas de inserção
            ModelCollection<ErroExportacaoComitente> listaInseridos = this._presenter.ListaErroExportacao.GetInserted();
            if (listaInseridos.Count > 0)
            {
                foreach (ErroExportacaoComitente item in listaInseridos)
                {
                    long count = this._presenter.ListaErroExportacao.LongCount(delegate(ErroExportacaoComitente x)
                    {
                        return (x.Codigo == item.Codigo);
                    });

                    if (count > 1)
                    {
                        this.dtgErrosExportacaoEspecificacaoComitentes.SelectedItem = item;
                        this.dtgErrosExportacaoEspecificacaoComitentes.BeginUpdate(this.dtgErrosExportacaoEspecificacaoComitentes.SelectedIndex);

                    }
                }
            }

            //linhas de alteração
            ModelCollection<ErroExportacaoComitente> listaAlterados = this._presenter.ListaErroExportacao.GetUpdated();
            if (listaAlterados.Count > 0)
            {
                foreach (ErroExportacaoComitente item in listaAlterados)
                {
                    long count = this._presenter.ListaErroExportacao.LongCount(delegate(ErroExportacaoComitente x)
                    {
                        return (x.Codigo == item.Codigo);
                    });

                    if (count > 1)
                    {
                        this.dtgErrosExportacaoEspecificacaoComitentes.SelectedItem = item;
                        this.dtgErrosExportacaoEspecificacaoComitentes.BeginUpdate(this.dtgErrosExportacaoEspecificacaoComitentes.SelectedIndex);
                    }
                }
            }
        }

        /// <summary>
        /// Informação que uma linha de inserção ou atualização está com a mesma descrição
        /// </summary>
        public void InformarLinhaMesmaDescricao()
        {
            //linhas de inserção
            ModelCollection<ErroExportacaoComitente> listaInseridos = this._presenter.ListaErroExportacao.GetInserted();
            if (listaInseridos.Count > 0)
            {
                foreach (ErroExportacaoComitente item in listaInseridos)
                {
                    long count = this._presenter.ListaErroExportacao.LongCount(delegate(ErroExportacaoComitente x)
                    {
                        return (x.Descricao == item.Descricao);
                    });

                    if (count > 1)
                    {
                        this.dtgErrosExportacaoEspecificacaoComitentes.SelectedItem = item;
                        this.dtgErrosExportacaoEspecificacaoComitentes.BeginUpdate(this.dtgErrosExportacaoEspecificacaoComitentes.SelectedIndex);

                    }
                }
            }

            //linhas de alteração
            ModelCollection<ErroExportacaoComitente> listaAlterados = this._presenter.ListaErroExportacao.GetUpdated();
            if (listaAlterados.Count > 0)
            {
                foreach (ErroExportacaoComitente item in listaAlterados)
                {
                    long count = this._presenter.ListaErroExportacao.LongCount(delegate(ErroExportacaoComitente x)
                    {
                        return (x.Descricao == item.Descricao);
                    });

                    if (count > 1)
                    {
                        this.dtgErrosExportacaoEspecificacaoComitentes.SelectedItem = item;
                        this.dtgErrosExportacaoEspecificacaoComitentes.BeginUpdate(this.dtgErrosExportacaoEspecificacaoComitentes.SelectedIndex);
                    }
                }
            }
        }

        #endregion        

       

       
    }
}
